/**
 * 无限大棋盘上给定2个位置，问能否通过走马的方式以给定步数从起点到终点
 * 如果能的话给出方案
 * 通过奇偶性可以判断是否能够到达，然后BFS找最短即可
 * 如果到达以后步数还没有用完，只需要来回跳即可
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;

int const DR[] = {-1, -2, -2, -1, +1, +2, +2, +1};
int const DC[] = {-2, -1, +1, +2, +2, +1, -1, -2};

struct _t{
    int curx;
    int cury;
    int step;
    int prx;
    int pry;
};

int N;
int M;
int K;
int Sx, Sy, Tx, Ty;
vector<vector<_t>> D;
queue<_t> Q;
vector<pair<int, int>> Ans;

pair<int, int> f(const pair<int, int> & t){
    for(int nr,nc,i=0;i<8;++i){
        nr = t.first + DR[i];
        nc = t.second + DC[i];
        if(1 <= nr and nr <= N and 1 <= nc and nc <= M){
            return {nr, nc};
        }
    }
    return {-1, -1};
}

void work(){
    cin >> N >> M >> K >> Sx >> Sy >> Tx >> Ty;
    if(Sx == Tx and Sy == Ty){
        if(K & 1) return (void)(cout << "No" << endl);
        auto p = f({Sx, Sy});
        if(-1 == p.first) return (void)(cout << "No" << endl);
        cout << "Yes" << endl;
        for(int i=0;i<K;i+=2){
            cout << p.first << " " << p.second << "\n";
            cout << Tx << " " << Ty << "\n";
        }
        return;
    }

    D.assign(N + 1, vector<_t>(M + 1, {-1, -1, -1, -1, -1}));
    Q.push({Sx, Sy, 0, -1, -1});
    size_t sz = 0;
    while(sz = Q.size()){
        while(sz--){
            auto h = Q.front(); Q.pop();
            for(int nr,nc,i=0;i<8;++i){
                nr = h.curx + DR[i];
                nc = h.cury + DC[i];
                if(1 <= nr and nr <= N and 1 <= nc and nc <= M and D[nr][nc].step == -1){
                    Q.push(D[nr][nc] = {nr, nc, h.step + 1, h.curx, h.cury});
                    if(nr == Tx and nc == Ty) goto L;
                }
            }
        }
    }
L:
    if(D[Tx][Ty].step == -1) return (void)(cout << "No\n"); 
    if(K < D[Tx][Ty].step) return (void)(cout << "No\n");

    int need = K - D[Tx][Ty].step;
    if(need & 1){
        return (void)(cout << "No\n");
    }

    Ans.clear();
    Ans.reserve(K);
    for(int i=0;i<need;i+=2){
        Ans.emplace_back(Tx, Ty);
        Ans.emplace_back(D[Tx][Ty].prx, D[Tx][Ty].pry);
    }

    int curx = Tx, cury = Ty;
    while(1){
        Ans.emplace_back(curx, cury);
        auto t = D[curx][cury];
        curx = t.prx;
        cury = t.pry;
        if(curx == Sx and cury == Sy) break;
    }
    

    cout << "Yes" << endl;
    for(auto it=Ans.rbegin();it!=Ans.rend();++it){
        cout << it->first << " " << it->second << "\n";
    }
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
	return 0;
}